package com.ssyc.common.http;

import android.view.View;

import com.ssyc.common.base.BaseApplication;
import com.ssyc.common.utils.UiUtils;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.StringCallback;

import java.util.HashMap;
import java.util.Map;

import okhttp3.Call;

/**
 * 封装的网络请求方法
 * Created by Administrator on 2018/2/2 0002.
 */

public class HttpUtils {


    public static Map<String, String> map;

    /**
     * 获取学生端添加固定参数的map
     */
    public static Map<String, String> getStudentMap() {
        map = new HashMap<>();

//        map.put("platform", "8");//固定
//        map.put("acc", "13720389803");//用户账号
//        map.put("role", "0");//用户角色,固定
//        map.put("apptoken", "WHBHWJDSAKDAKSDNSAJDAK");//用户token
        return map;
    }

    /**
     * Post请求
     *
     * @param url
     * @param params
     * @param tag
     * @param callBack
     */
    public static void post(String url, Map<String, String> params, Object tag, final CallBack callBack) {
        OkHttpUtils.post().tag(tag).url(url).params(params).build().execute(new StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                if (null != callBack) {
                    callBack.onError(call, e, id);
                }
            }

            @Override
            public void onResponse(String response, int id) {
                if (null != callBack) {
                    callBack.onResponse(response, id);
                }
            }
        });
    }

    /**
     * 预处理了返回错误的处理方式
     *
     * @param url         请求的Url
     * @param params      请求的参数Map集合
     * @param tag         请求的Tag
     * @param loadingView 加载框布局
     * @param llContent   内容布局
     * @param callBack    成功的回调接口
     */
    public static void post(String url, Map<String, String> params, Object tag, final View loadingView, final View llContent, final SucceedCallBack callBack) {
        OkHttpUtils.post().tag(tag).url(url).params(params).build().execute(new StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                if (null != loadingView) {
                    loadingView.setVisibility(View.GONE);
                }
                UiUtils.Toast(BaseApplication.ERROR, false);
            }

            @Override
            public void onResponse(String response, int id) {
                if (null != loadingView) {
                    loadingView.setVisibility(View.GONE);
                }

                if (null != llContent && llContent.getVisibility() != View.VISIBLE) {
                    llContent.setVisibility(View.VISIBLE);
                }

                if (null != callBack) {
                    callBack.onSucceed(response, id);
                }
            }
        });
    }


//    /**
//     * Post请求
//     *
//     * @param url
//     * @param params
//     * @param tag
//     */
//    public static <T> void post(String url, Map<String, String> params, Object tag, final View loadingView, final SuccessCallBack<T> callBack) {
//        OkHttpUtils.post().tag(tag).url(url).params(params).build().execute(new StringCallback() {
//            @Override
//            public void onError(Call call, Exception e, int id) {
//                if (null != loadingView) {
//                    loadingView.setVisibility(View.GONE);
//                }
//                UiUtils.Toast(BaseApplication.ERROR, false);
//            }
//
//            @Override
//            public void onResponse(String response, int id) {
//                if (!TextUtils.isEmpty(response)) {
//                    BaseResult result = null;
//                    try {
//                        result = GsonUtil.jsonToBean(response, BaseResult.class);
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                        Log.i("test", "数据解析异常");
//                    }
//                    if (null != result) {
//                        if ("200".equals(result.state)) {
//                            //返回成功
//                            if (null != callBack) {
//                                callBack.onSuccess((T) result.data, id);
//                            }
//                        } else {
//                            UiUtils.Toast("返回异常码是:" + result.state, false);
//                        }
//
//                    } else {
//                        Log.i("test", "数据器返回数据为空");
//                    }
//                }
//
//            }
//        });
//    }
//

    /**
     * Get请求
     *
     * @param url
     * @param params
     * @param tag
     * @param callBack
     */
    public static void get(String url, Map<String, String> params, Object tag, final CallBack callBack) {
        OkHttpUtils.get().tag(tag).url(url).params(params).build().execute(new StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                if (null != callBack) {
                    callBack.onError(call, e, id);
                }
            }

            @Override
            public void onResponse(String response, int id) {
                if (null != callBack) {
                    callBack.onResponse(response, id);
                }
            }
        });
    }

    /**
     * 请求回调接口
     */
    public interface CallBack {
        void onError(Call call, Exception e, int id);

        void onResponse(String response, int id);
    }

    /**
     * 只处理服务器返回成功并且有数据的回调接口
     */
    public interface SucceedCallBack {
        void onSucceed(String response, int id);
    }
}
